package Day06;

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class GuessLetter {
	public static void main(String[] args) {
		// 用户猜测次数
		int count = 0;
		// 把随机的字母取出来
		char[] generate = generate();
		Scanner scan = new Scanner(System.in);
		p("请输入猜测的字母(例如:ABCDE),exit--退出游戏");
		while (true) {
			// 存储用户猜测的数据
			char[] input = null;
			String sInput = scan.next().trim().toUpperCase();
			if("EXIT".equals(sInput)) {
				p("已退出");
				break;
			}
			input = sInput.toCharArray();
			// 进行比较
			int result[] = compare(generate, input);
			// 每比较一次，次数加1
			count++;
			// 获取位置正确并且值也正确的字母个数
			int absoluteRight = result[0];
			// 一旦完全正确，就退出循环
			if (absoluteRight == 5) {
				int score = 500 - (count * 10);
				p("恭喜你猜对了,你的得分是" + score);
				break;
			} else if (absoluteRight == 6) {
				p("已退出");
				break;
			} else {
				// 获取值正确的字母个数
				int right = result[1];
				// 计算猜对的字母个数
				int sum = absoluteRight + right;
				p("你猜对了" + sum + "个字符,其中" + absoluteRight + "个字符的位置正确!(总次数=" + count + ",exit--退出游戏)");
			}
		}
	}

	// 定义方法生成随机字母
	public static char[] generate() {
		// 定义字母库，从中随机获取字母
		char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
				'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
		boolean flags[] = new boolean[letters.length];
		// 定义随机生成后的字母数组
		char[] chs = new char[5];
		for (int i = 0; i < chs.length; i++) {
			// 生成随机下标
			int index;
			do {
				index = (int) (Math.random() * 25);
			} while (flags[index]);// 一旦满足循环条件说明已经有存在的了，就重新生成下标，直到没有重复的
			chs[i] = letters[index];// 把新生成的下标对应的字母放入随机数组当中
			flags[index] = true;// 把已经用过的字母位置改为true，说明已经有了
		}
		return chs;
	}

	/*
	 * 定义用户输入和随机生成的字母比较方法 参数1：随机生成的字母数组 参数2：用户猜测的字母数组 返回值：返回一个长度为2的整型数组
	 * 下标为0的代表字母和位置都正确的字母个数 下标为1的代表字母正确但是位置不正确的字母个数
	 */
	public static int[] compare(char[] generate, char[] input) {
		int num1 = 0;
		int num2 = 0;
		// 开始比较
		for (int i = 0; i < input.length; i++) {
			for (int j = 0; j < generate.length; j++) {
				if (input[i] == generate[j]) {
					num2++;
					if (i == j) {
						num1++;
					}
					break;
				}
			}
		}
		// 声明需要返回的字符串数组
		int[] compare = new int[] { num1, num2 };
		return compare;
	}

	// 打印函数
	public static void p(String str) {
		System.out.println(str);
	}

	public static void cp(char str) {
		System.out.println(str);
	}
}
